Créer une clé GnuPG

Publié surAuteurMatthieu FontanaLaisser un commentaire

gnupggnupg
Creative Commons Attribution-ShareAlike 3.0 Unported License
 

Le chiffrement et le principe des clés de chiffrement n’est pas toujours aisé à comprendre. Il est pourtant impératif aujourd’hui, avec l’utilisation massive des moyens de communication et de stockage de l’utiliser. Chiffrer ses mails, c’est un peu comme mettre une enveloppe pour envoyer une lettre par la poste…

Chiffrer ses sauvegardes sur le cloud, c’est comme fermer la porte de son armoire… Je vais vous donner quelques pistes pour pouvoir créer une clé sécurisée à utiliser pour signer, chiffrer, vous authentifier, avec éventuellement plusieurs adresses mails. Last but not least, renseignez-vous sur les lois en vigueur sur le chiffrement dans vos différents pays.

« l’utilisation des moyens de cryptologie est libre »

loi n° 2004-575 du 21 juin pour la confiance dans l’économie numérique (LCEN) article 30

On ne va pas s’en priver…

Pré requis

Le mieux pour la sécurité, est de créer votre clé sur une machine spécifique, non connectée à Internet. De monter un volume chiffré et travailler à l’intérieur d’un répertoire aléatoire de /tmp.

Vérifiez l’entropie de votre machine :

[matt@m4800 ~]$ cat /proc/sys/kernel/random/entropy_avail

3945

Si l’entropie est inférieure à 2000, comme ce n’est pas le sujet de cet article (mais à venir dans un avenir… proche), je vous invite à vous renseigner sur les différentes méthodes pour l’augmenter :

Pour installer gnupg (adaptez en fonction de votre distribution) :

# dnf install gnupg2

[matt@m4800 ~]$ gpg2 --version

gpg (GnuPG) 2.2.19

libgcrypt 1.8.5

Copyright (C) 2019 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later https://gnu.org/licenses/gpl.html

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Home: /home/matt/.gnupg

Algorithmes pris en charge :

Clef publique : RSA, ELG, DSA, ECDH, ECDSA, EDDSA

Chiffrement : IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,

TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256

Hachage : SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224

Compression : Non compressé, ZIP, ZLIB, BZIP2

Si gnupg était déjà installé, par précaution, on donne les bons droits sur les répertoires et fichiers:

# find ~/.gnupg -type d -exec chmod 0700 {} +

# find ~/.gnupg -type d -exec chmod 0600 {} +

Ensuite on vérifie la configuration de gnupg pour éventuellement la changer. Ouvrez ou créez le fichier ~/.gnupg/gpg.conf pour y insérer :

# cat > ~/.gnupg/gpg.conf <<EOF

personal-cipher-preferences AES256 AES192 AES

personal-digest-preferences SHA512 SHA384 SHA256

personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed

default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed

cert-digest-algo SHA512

s2k-digest-algo SHA512

s2k-cipher-algo AES256

charset utf-8

fixed-list-mode

no-comments

no-emit-version

keyid-format 0xlong

list-options show-uid-validity

verify-options show-uid-validity

with-fingerprint

require-cross-certification

no-symkey-cache

use-agent

throw-keyids

EOF

Afin de mieux comprendre la signification des options et leur adaptation, je vous laisse aller consulter le site, très bien documenté  :

La clé master

Vous pouvez générer un mot de passe de la manière suivante, vous en aurait besoin un peu plus tard.

[root@m4800 tmp.Md38Rcfqji]# gpg --gen-random --armor 0 24

ekDgmUYwWELTImBb1HEwtS0WZfHMPJKn

À ce stade, tout est quasiment prêt pour débuter la création des clés. Il faut savoir que pour la clé principale comme pour les sous-clés, vous pouvez utiliser le traditionnel algorithme RSA (choix 8 dans le paragraphe suivant) ou, depuis 5 ans (2015) c25519 (choix 11) l’algorithme basé sur la structure des courbes elliptiques. Je traiterai ce sujet une autre fois.

Allez, c’est parti mon kiki, on génère une clé :

gpg --expert --full-generate-key

gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Sélectionnez le type de clef désiré :

(1) RSA et RSA (par défaut)

(2) DSA et Elgamal

(3) DSA (signature seule)

(4) RSA (signature seule)

(7) DSA (indiquez vous-même les capacités)

(8) RSA (indiquez vous-même les capacités)

(9) ECC et ECC

(10) ECC (signature seule)

(11) ECC (indiquez vous-même les capacités)

(13) Clef existante

(14) Existing key from card

Quel est votre choix ? 8

Actions possibles pour une clef RSA : Signer Certifier Chiffrer Authentifier

Actions actuellement permises : Signer Certifier Chiffrer

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? C

Actions possibles pour une clef RSA : Signer Certifier Chiffrer Authentifier

Actions actuellement permises : Signer Certifier

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? S

Actions possibles pour une clef RSA : Signer Certifier Chiffrer Authentifier

Actions actuellement permises : Certifier

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? Q

les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.

Quelle taille de clef désirez-vous ? (2048) 4096

La taille demandée est 4096 bits

Veuillez indiquer le temps pendant lequel cette clef devrait être valable.

0 = la clef n'expire pas

= la clef expire dans n jours

w = la clef expire dans n semaines

m = la clef expire dans n mois

y = la clef expire dans n ans

Pendant combien de temps la clef est-elle valable ? (0) 0

La clef n'expire pas du tout

Est-ce correct ? (o/N) o

Mettre maintenant ses coordonnées privées, et son mot de passe :

GnuPG doit construire une identité pour identifier la clef.

Nom réel : M Fontana

Adresse électronique : matt@eu.org

Commentaire :

Vous avez sélectionné cette identité :

« M Fontana matt@eu.org »

Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique

ou (O)ui/(Q)uitter ? O

De nombreux octets aléatoires doivent être générés. Vous devriez faire

autre chose (taper au clavier, déplacer la souris, utiliser les disques)

pendant la génération de nombres premiers ; cela donne au générateur de

nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

gpg: /tmp/tmp.Md38Rcfqji/trustdb.gpg : base de confiance créée

gpg: clef 0x94232CC170DADE82 marquée de confiance ultime.

gpg: répertoire « /tmp/tmp.Md38Rcfqji/openpgp-revocs.d » créé

gpg: revocation certificate stored as '/tmp/tmp.Md38Rcfqji/openpgp-revocs.d/3ABB546BE3B12E6AE3DB20B494232CC170DADE82.rev'

les clefs publique et secrète ont été créées et signées.

pub rsa4096/0x94232CC170DADE82 2020-05-04 [C]

Empreinte de la clef = 3ABB 546B E3B1 2E6A E3DB 20B4 9423 2CC1 70DA DE82

uid M Fontana matt@eu.org

Maintenant que vous avez cette nouvelle clé pour certifier, exportez là pour plus tard:

# export KEYID=0x94232CC170DADE82

Si vous aviez une ancienne clé, vous pouvez maintenant signer la nouvelle avec l’ancienne pour prouver que c’est bien vous. Il faut exporter la nouvelle clé dans un répertoire de travail de /tmp, et également avoir exporter la variable de l’ID de l’ancienne clé avec la valeur OLDKEY.

# gpg --export-secret-keys --armor --output /tmp/new.sec

# gpg --default-key $OLDKEY --sign-key $KEYID

Les sous-clés

On passe maintenant aux sous-clés. On va éditer notre clé master et ajouter les sous-clés :

# gpg --expert --edit-key $KEYID

gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

La clef secrète est disponible.

gpg: vérification de la base de confiance

gpg: marginals needed: 3 completes needed: 1 trust model: pgp

gpg: profondeur : 0 valables : 1 signées : 0

confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ultime . M Fontana matt@eu.org

On créé la sous-clé en sélectionnant 4 RSA (signature seule)

gpg> addkey

Sélectionnez le type de clef désiré :

(3) DSA (signature seule)

(4) RSA (signature seule)

(5) Elgamal (chiffrement seul)

(6) RSA (chiffrement seul)

(7) DSA (indiquez vous-même les capacités)

(8) RSA (indiquez vous-même les capacités)

(10) ECC (signature seule)

(11) ECC (indiquez vous-même les capacités)

(12) ECC (chiffrement seul)

(13) Clef existante

(14) Existing key from card

Quel est votre choix ? 4

les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.

Quelle taille de clef désirez-vous ? (2048) 4096

La taille demandée est 4096 bits

Veuillez indiquer le temps pendant lequel cette clef devrait être valable.

0 = la clef n'expire pas

= la clef expire dans n jours

w = la clef expire dans n semaines

m = la clef expire dans n mois

y = la clef expire dans n ans

Pendant combien de temps la clef est-elle valable ? (0) 1y

La clef expire le mer. 05 mai 2021 00:31:48 CEST

Est-ce correct ? (o/N) o

Faut-il vraiment la créer ? (o/N) o

De nombreux octets aléatoires doivent être générés. Vous devriez faire

autre chose (taper au clavier, déplacer la souris, utiliser les disques)

pendant la génération de nombres premiers ; cela donne au générateur de

nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ultime . M Fontana matt@eu.org

C’est au tour du chiffrement, de la même manière au ajoute une sous-clé mais cette fois-ci en sélectionnant 6 (chiffrement seul)

gpg> addkey

Sélectionnez le type de clef désiré :

(3) DSA (signature seule)

(4) RSA (signature seule)

(5) Elgamal (chiffrement seul)

(6) RSA (chiffrement seul)

(7) DSA (indiquez vous-même les capacités)

(8) RSA (indiquez vous-même les capacités)

(10) ECC (signature seule)

(11) ECC (indiquez vous-même les capacités)

(12) ECC (chiffrement seul)

(13) Clef existante

(14) Existing key from card

Quel est votre choix ? 6

les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.

Quelle taille de clef désirez-vous ? (2048) 4096

La taille demandée est 4096 bits

Veuillez indiquer le temps pendant lequel cette clef devrait être valable.

0 = la clef n'expire pas

= la clef expire dans n jours

w = la clef expire dans n semaines

m = la clef expire dans n mois

y = la clef expire dans n ans

Pendant combien de temps la clef est-elle valable ? (0) 1y

La clef expire le mer. 05 mai 2021 00:34:49 CEST

Est-ce correct ? (o/N) o

Faut-il vraiment la créer ? (o/N) o

De nombreux octets aléatoires doivent être générés. Vous devriez faire

autre chose (taper au clavier, déplacer la souris, utiliser les disques)

pendant la génération de nombres premiers ; cela donne au générateur de

nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ultime . M Fontana matt@eu.org

Pour terminer, on créé la sous-clé pour l’authentification, on sélectionne 8.
Vous pourrez vous servir de cette sous-clé pour vous authentifier sur les serveurs par exemple via SSH.

gpg> addkey

Sélectionnez le type de clef désiré :

(3) DSA (signature seule)

(4) RSA (signature seule)

(5) Elgamal (chiffrement seul)

(6) RSA (chiffrement seul)

(7) DSA (indiquez vous-même les capacités)

(8) RSA (indiquez vous-même les capacités)

(10) ECC (signature seule)

(11) ECC (indiquez vous-même les capacités)

(12) ECC (chiffrement seul)

(13) Clef existante

(14) Existing key from card

Quel est votre choix ? 8

Actions possibles pour une clef RSA : Signer Chiffrer Authentifier

Actions actuellement permises : Signer Chiffrer

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? S

Actions possibles pour une clef RSA : Signer Chiffrer Authentifier

Actions actuellement permises : Chiffrer

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? C

Actions possibles pour une clef RSA : Signer Chiffrer Authentifier

Actions actuellement permises :

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? A

Actions possibles pour une clef RSA : Signer Chiffrer Authentifier

Actions actuellement permises : Authentifier

(S) Inverser la capacité de signature

(C) Inverser la capacité de chiffrement

(A) Inverser la capacité d'authentification

(Q) Terminé

Quel est votre choix ? Q

les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.

Quelle taille de clef désirez-vous ? (2048) 4096

La taille demandée est 4096 bits

Veuillez indiquer le temps pendant lequel cette clef devrait être valable.

0 = la clef n'expire pas

= la clef expire dans n jours

w = la clef expire dans n semaines

m = la clef expire dans n mois

y = la clef expire dans n ans

Pendant combien de temps la clef est-elle valable ? (0) 1y

La clef expire le mer. 05 mai 2021 00:38:55 CEST

Est-ce correct ? (o/N) o

Faut-il vraiment la créer ? (o/N) o

De nombreux octets aléatoires doivent être générés. Vous devriez faire

autre chose (taper au clavier, déplacer la souris, utiliser les disques)

pendant la génération de nombres premiers ; cela donne au générateur de

nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ssb rsa4096/0x36131C3F9622CE9A

créé : 2020-05-04 expire : 2021-05-04 utilisation : A

ultime . M Fontana matt@eu.org

On quitte la CLI:

gpg> save

Ajout d’autres identités

On peut comme j’en avais parlé en introduction, ajouter plusieurs autres identités. Pour cela, on repart dans la CLI :

gpg> adduid

Nom réel : M Fontana

Adresse électronique : matt@nsz.gov

Commentaire :

Vous avez sélectionné cette identité :

« M Fontana matt@nsz.gov »

Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique

ou (O)ui/(Q)uitter ? O

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ssb rsa4096/0x36131C3F9622CE9A

créé : 2020-05-04 expire : 2021-05-04 utilisation : A

ultime M Fontana matt@eu.org

inconnue. M Fontana matt@nsz.gov

gpg> trust

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ssb rsa4096/0x36131C3F9622CE9A

créé : 2020-05-04 expire : 2021-05-04 utilisation : A

ultime M Fontana matt@eu.org

inconnue. M Fontana matt@nsz.gov

Décidez maintenant de la confiance que vous portez en cet utilisateur pour

vérifier les clefs des autres utilisateurs (en regardant les passeports, en

vérifiant les empreintes depuis diverses sources, etc.)

1 = je ne sais pas ou n'ai pas d'avis

2 = je ne fais PAS confiance

3 = je fais très légèrement confiance

4 = je fais entièrement confiance

5 = j'attribue une confiance ultime

m = retour au menu principal

Quelle est votre décision ? 5

Voulez-vous vraiment attribuer une confiance ultime à cette clef ? (o/N) o

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ssb rsa4096/0x36131C3F9622CE9A

créé : 2020-05-04 expire : 2021-05-04 utilisation : A

ultime M Fontana matt@eu.org

inconnue. M Fontana matt@nsz.gov

gpg> uid 1

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ssb rsa4096/0x36131C3F9622CE9A

créé : 2020-05-04 expire : 2021-05-04 utilisation : A

ultime * M Fontana matt@eu.org

inconnue. M Fontana matt@nsz.gov

gpg> primary

sec rsa4096/0x94232CC170DADE82

créé : 2020-05-04 expire : jamais utilisation : C

confiance : ultime validité : ultime

ssb rsa4096/0xEC2AC085ACE87563

créé : 2020-05-04 expire : 2021-05-04 utilisation : S

ssb rsa4096/0x0C240A0131F66510

créé : 2020-05-04 expire : 2021-05-04 utilisation : E

ssb rsa4096/0x36131C3F9622CE9A

créé : 2020-05-04 expire : 2021-05-04 utilisation : A

ultime * M Fontana matt@eu.org

inconnue M Fontana matt@nsz.gov

gpg> save

Voilà, vous avez maintenant une super clé que vous pouvez visualiser avec la commande :

[root@m4800 tmp.Md38Rcfqji]# gpg -K

gpg: vérification de la base de confiance

gpg: marginals needed: 3 completes needed: 1 trust model: pgp

gpg: profondeur : 0 valables : 1 signées : 0

confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.

/tmp/tmp.Md38Rcfqji/pubring.kbx

sec rsa4096/0x94232CC170DADE82 2020-05-04 [C]

Empreinte de la clef = 3ABB 546B E3B1 2E6A E3DB 20B4 9423 2CC1 70DA DE82

uid [ ultime ] M Fontana matt@eu.org

uid [ ultime ] M Fontana matt@nsz.gov

ssb rsa4096/0xEC2AC085ACE87563 2020-05-04 [S] [expire : 2021-05-04]

ssb rsa4096/0x0C240A0131F66510 2020-05-04 [E] [expire : 2021-05-04]

ssb rsa4096/0x36131C3F9622CE9A 2020-05-04 [A] [expire : 2021-05-04]

On peut facilement exporter toutes ces clés :

$ gpg -o \ou\vous\voulez\mastersub.gpg --armor --export-secret-keys $KEYID

$ gpg -o \ou\vous\voulez\sub.gpg --armor --export-secret-subkeys $KEYID

Révocation

Important, et à ne pas oublier, le certificat de révocation… au cas ou vous auriez perdu la clé ou que l’on vous ait subtilisé votre identité…

$ gpg --generate-revocation $KEYID --output \ou\vous\voulez\revoke.asc

C’est tout pour aujourd’hui ! Vous devriez surement exporter toutes ces clés dans une clé USB sécurisée avec un volume chiffré ou sur une YubiKey. Cela fera aussi l’objet d’un futur article…

Bon hacking